// axios封装
import axios, { InternalAxiosRequestConfig, AxiosResponse } from "axios";
import { getToken, removeToken } from "./token";
import router from "../router";
//1. 根域名

//2. 超时时间

//3. 请求拦截器/响应拦截器

const request = axios.create({
  baseURL: "http://geek.itheima.net/v1_0",
  timeout: 5000,
});

//在请求发送之前 做拦截 插入一些自定义配置
request.interceptors.request.use(
  (config: InternalAxiosRequestConfig) => {
    // 1. 获取token
    // 2. 按后端格式要求做token拼接
    const token = getToken();
    if (token) {
      config.headers.Authorization = `Bearer ${token}`;
    }
    return config;
  },
  (error: any) => {
    return Promise.reject(error);
  }
);

//在响应返回到客户端前做拦截 重点处理返回的数据
request.interceptors.response.use(
  (response: AxiosResponse) => {
    return response.data;
  },
  (error: any) => {
    //监控401 token失效
    if (error.response.status === 401) {
      //TODO 清除token信息 跳转登录页面
      removeToken();
      router.navigate("/login");
      window.location.reload(); // 重新加载页面
    }
    return Promise.reject(error);
  }
);
export { request };
